@echo off
::================需更改参数(不要加引号和空格)================
::参数设置
set user=root
set password=password01!
set port=3306

::数据库名称
set db_name=db_name

::备份位置(若不存在,会自动创建)
set datafile_path=d:\opt\database_bak

::mysqlDump的绝对位置,基本为mysql安装路径
set mysqlDump_path=C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe

::是否删除.sql文件(包含子目录): ON开启,其他字符不开启
set rf_switch=ON

::数据保留天数(按文件修改时间计算)
set expire_day=7


::================非开发人员勿改================
::备份最终路径
set bak_path=%datafile_path%\%db_name%
::错误日志文件名称
set error_log=%bak_path%\%db_name%_error.log


::判断文件夹不存在则创建
if not exist %bak_path% (
	mkdir %bak_path%
	echo %date% %time% 创建文件夹%bak_path% >> %bak_path%/info.log
)


::判断mysql是否开启
netstat -aon | findstr %port%

if %errorlevel% neq 0 (
	echo %date% %time% 没有监听到MySQL端口,请检查MySQL服务是否启动 >>%error_log%
)

::执行备份
set time_name=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%

"%mysqlDump_path%" -u%user% -p%password% %db_name% > %bak_path%\%db_name%_%time_name%.sql 2>> %error_log%
if %errorlevel% neq 0 (
	echo %date% %time%   数据库 %bak_path%\%db_name%_%time_name%.sql备份失败>>%error_log%
)

::删除过期文件
if %rf_switch%==ON goto RF_METHOD

:RF_METHOD
forfiles /s /d -%expire_day% /m *.sql /p "%bak_path%" /c "cmd /c del @path"
goto :EOF